const express = require('express')
const router = express.Router()
const db = require('../db')

// jwt
const jsonwebtoken = require('jsonwebtoken');
// const token = jsonwebtoken.sign({ username: 'zs' }, keyStr, { expiresIn: '600s' });
// console.log('token -----> ', token);




// 使用 joi 做表单校验
const Joi = require("joi")
// 定义表单验证规则
const user_schema = Joi.object({
    username: Joi.string().alphanum().min(5).max(12).required().error(new Error("账号不规范")),
    password: Joi.string().required().regex(/^\w{6,16}$/).error(new Error("密码不规范")),
});
// const info = {username: 'admin', password:"123456"}
// schema.validateAsync(info);

// 引进 创建表单校验方法
const { validation } = require("../utils")
// 引进加密 bcryptjs
const bcryptjs = require('bcryptjs')

// 注册
router.post('/regUser', validation(user_schema), (req, res) => {
    //   console.log('req.body -----> ', req.body);
    let { username, password } = req.body
    // 数据库查询
    db.query('SELECT * FROM ev_users WHERE username = ?', [username], (err, result) => {
        if (err) return res.cc(err)
        if (result.length > 0) return res.cc('用户名被占用!')
        // 成功，需要对密码加密-插入数据库-返回数据
        password = bcryptjs.hashSync(password, 10)
        db.query('insert into ev_users set ?', [{ username, password }], (err, result) => {
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) {
                return res.cc('失败，请稍后再试')
            }
            res.send({ code: 200, msg: '成功', data: '' })
        })
    })
})

// 登录
// 目前和注册使用同一个 校验规则
router.post('/login', validation(user_schema), (req, res) => {
    let { username, password } = req.body
    // 数据库查询
    db.query('SELECT * FROM ev_users WHERE username = ?', [username], (err, result) => {
        if (err) return res.cc(err)
        if (result.length != 1) return res.cc('账号或密码错误!')
        // 密码对比，成功代表可以登录,返回 jwt 生成的 token
        const {password : hashpassword, user_pic, ...userInfo} = result[0]
        if (bcryptjs.compareSync(password, hashpassword)) {
            const token = jsonwebtoken.sign({ userInfo }, 'tiancai', { expiresIn: '72h' });
            res.send({ code: 200, msg: '成功', data: token })
        }
    })
})

// commonjs 导出模块
module.exports = router